﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

using namespace std;


class Student;
class Person
{
public:
	friend void Display(const Person& p, const Student& s);
protected:
	string _name = "小志"; // 姓名
};

class Student : public Person
{
public:
	friend void Display(const Person& p, const Student& s);
protected:
	int _stuNum = 220220; // 学号
};
void Display(const Person& p, const Student& s)
{
	cout << p._name << endl;
	cout << s._stuNum << endl;
}
int main()
{
	Person p;
	Student s;
	// 编译报错：error C2248: “Student::_stuNum”: ⽆法访问 protected 成员
	// 解决⽅案：Display也变成Student 的友元即可
	Display(p, s);
	return 0;
}

//class Person
//{
//protected:
//	string _name; // 姓名
//	string _sex; // 性别
//	int _age; // 年龄
//};
//class Student : public Person
//{
//public:
//	int _No; // 学号
//};
//int main()
//{
//	Student sobj;
//	// 1.派⽣类对象可以赋值给基类的指针/引⽤
//	Person* pp = &sobj;
//	Person& rp = sobj;
//	// ⽣类对象可以赋值给基类的对象是通过调⽤基类的拷⻉构造完成的
//	Person pobj = sobj;
//	//2.基类对象不能赋值给派⽣类对象，这⾥会编译报错
//	//sobj = pobj;
//	return 0;
//}
//int main()
//{
//	int l = 0;
//	scanf("%d",&l);
//	return 0;
//}
//// 实例演⽰三种继承关系下基类成员的各类型成员访问关系的变化
//class Person
//{
//public :
//	void Print()
//	{
//		cout << _name << endl;
//	}
//protected:
//	string _name; // 姓名
//private:
//	int _age; // 年龄
//};
////class Student : protected Person
////class Student : private Person
//class Student : public Person
//{
//protected :
//	int _stunum; // 学号
//};
//int main()
//{
//	Student xz;
//	xz.Print();
//
//	return 0;
//}

//#include <stdio.h>
//
//int main()
//{
//	int a = 3, b, c;
//	b = (a++) + (a++) + (a++);
//	printf("%d %d\n", a, b);
//	c = (++a) + (++a) + (++a);
//	printf("%d %d\n", a, c);
//	return 0;
//}